#include <stdio.h>

#include <constants.h>
#include <config-client.h>
#include <base64.h>

char* httpPass=NULL;

unsigned int ConfReportFrequency(){
	return reportFrequency;
}

unsigned int ConfMaxReport(){
	return maxReport;
}
unsigned int ConfHttpPort(){
	return httpPort;
}

unsigned int ConfQubePort(){
	return qubePort;
}

char* ConfHttpPass(){
	return httpPass;
}

char* ServerName(unsigned int index){
	if(serverName[index][0]=='\00' || index>=LEN_SERVERLIST){
		return NULL;
	}
	return serverName[index];
}

char* ServerAdress(unsigned int index){
	if(serverAdress[index][0]=='\00' || index>=LEN_SERVERLIST){
		return NULL;
	}
	return serverAdress[index];
}

void ReadConfig(){

	reportFrequency=maxReport=httpPort=0;	
	qubePort=DEFAULT_QUBE_PORT;

	FILE* pf;
	pf=fopen(CLIENT_CONFIG, "r");
	if(pf==NULL){
		LogError("Impossible d'ouvrir le fichier de configuration", 1);
	}

	char name[64];
	char data[64];
	int ret;

	while((ret=fscanf(pf, "%[^:]:%[^\n]\n", name, data))==2){
		if(strcmp(name, "ReportFrequency")==0){
			reportFrequency = atoi(data);
		}else if(strcmp(name, "MaxReport")==0){
			maxReport = atoi(data);
		}else if(strcmp(name, "HttpPort")==0){
			httpPort = atoi(data);
		}else if(strcmp(name, "QubePort")==0){
			qubePort = atoi(data);
		}else if(strcmp(name, "HttpPass")==0){
			httpPass = base64_encode(data,strlen(data),NULL);
		}else if(name[0]!='#'){
			close(pf);
			LogError("Le fichier de configuration est mal formaté",1);		
		}
	}
	if(ret!=EOF||reportFrequency<10||maxReport<1||maxReport>9999||httpPort<1||httpPort==qubePort){
		close(pf);
		LogError("Fichier de configuration incohérent ou incomplet",1);	
	}
	close(pf);
	return;
}

int ServerNameCorrect(char* sName){
	int i;
	for(i=0;sName[i]!='\000';++i){
		char c=sName[i];
		if(!(c>='0' && c<='9') && !(c>='A' && c<='Z') && !(c>='a' && c<='z') && !(c=='-' || c=='_')){
			return 0;
		}
	}
	return 1;
}

void ReadServerList(){
	int i;	

	for(i=0; i<LEN_SERVERLIST; ++i){
		serverName[i][0] = '\00';
		serverAdress[i][0] = '\00';
	}

	FILE* pf;
	pf=fopen(CLIENT_LIST, "r");
	if(pf==NULL){
		LogError("Impossible d'ouvrir le fichier des serveurs", 2);
	}

	char name[LEN_SERVERNAME];
	char adress[LEN_SERVERADRESS];
	int ret;

	while((ret=fscanf(pf, "%[^:]:%[^\n]\n", name, adress))==2){
		if(strlen(name)>LEN_SERVERNAME-1 || strlen(adress)>LEN_SERVERADRESS-1){
			LogError("Des données du fichier des serveurs sont trop volumineuses", 2);
		}
		if(!ServerNameCorrect(name)){
			LogError("Un serveur de la liste est mal nommé, utilisez [-_A-Za-z0-9].", 2);
		}

		for(i=0; i<LEN_SERVERLIST; ++i){
			if(serverName[i][0]=='\00'){
				strcpy(serverName[i],name);
				strcpy(serverAdress[i],adress);
				break;
			}else if(strcmp(serverName[i],name)==0){
				LogError("Deux serveurs de la liste des serveurs portent le même nom interne", 2);
			}
		}
		if(i==LEN_SERVERLIST || serverName[0][0]=='\00'){
			LogError("Trop de serveurs sont présents dans le fichiers des servers", 2);
		}
	}
}
